package com.pt25.service.sys.domain.config.service.impl;

import com.pt25.base.dep.db.DbConstants;
import com.pt25.base.exception.BizException;
import com.pt25.base.util.JsonUtil;
import com.pt25.base.util.PageUtil;
import com.pt25.service.sys.domain.config.ddo.ConfigType;
import com.pt25.service.sys.domain.config.service.ConfigTypeService;
import com.pt25.service.sys.repository.mysql.persistence.ConfigTypeRepo;
import com.pt25.service.sys.repository.mysql.po.ConfigTypePo;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class ConfigTypeServiceImpl implements ConfigTypeService {
    @Resource
    private ConfigTypeRepo configTypeRepo;

    @Override
    public Long addConfigType(ConfigType configType) {
        ConfigType configTypeByTypeName = getConfigTypeByTypeName(configType.getTypeName());
        if (configTypeByTypeName != null) {
            log.warn("配置类型名称已经存在,configType={}！", JsonUtil.toJson(configType));
            throw new BizException("配置类型名称已经存在,configType=" + JsonUtil.toJson(configType) + "！");
        }
        ConfigTypePo configTypePo = configType.toConfigTypePo();
        configTypeRepo.save(configTypePo);
        return configTypePo.getId();
    }

    @Override
    public Boolean delConfigType(Long id) {
        if (getConfigType(id) == null) {
            ConfigType configType = ConfigType.builder().id(id).delFlag(DbConstants.DEL_FLAG1).build();
            return configTypeRepo.updateById(configType.toConfigTypePo());
        }
        return false;
    }

    @Override
    public Boolean updateConfigType(ConfigType configType) {
        ConfigTypePo configTypePo = configTypeRepo.getById(configType.getId());
        if (null == configTypePo) {
            log.warn("数据不存在,configType={}！", JsonUtil.toJson(configType));
            throw new BizException("数据不存在,configType=" + JsonUtil.toJson(configType) + "！");
        }
        ConfigType configTypeByTypeName = getConfigTypeByTypeName(configTypePo.getTypeName());
        if (configTypeByTypeName != null && !configTypeByTypeName.getId().equals(configType.getId())) {
            log.warn("配置类型名称已经存在,configType={}！", JsonUtil.toJson(configType));
            throw new BizException("配置类型名称已经存在,configType=" + JsonUtil.toJson(configType) + "！");
        }
        configTypePo.setTypeName(configTypePo.getTypeName());
        configTypePo.setTypeTitle(configTypePo.getTypeTitle());
        configTypePo.setTypeDescription(configTypePo.getTypeDescription());
        return configTypeRepo.updateById(configTypePo);
    }

    @Override
    public ConfigType getConfigType(Long id) {
        ConfigTypePo configTypePo = configTypeRepo.getById(id);
        if (null != configTypePo && DbConstants.DEL_FLAG0.equals(configTypePo.getDelFlag())) {
            return ConfigType.toConfigType(configTypePo);
        }
        return null;
    }

    @Override
    public PageUtil.PageVo pageConfigType(ConfigType configType) {
        return configTypeRepo.pageConfigType(configType);
    }

    @Override
    public ConfigType getConfigTypeByTypeName(String typeName) {
        return ConfigType.toConfigType(configTypeRepo.getConfigTypePoByTypeName(typeName));
    }
}
